基于Web Vitals的秒开优化调研需求背景项目中上线的H5页面越来越多,用户在Web页面的体验变得更加重要。
随着网络带宽不断发展增大,人们对网页的打开速度要求也变得越来越高。
性能指标做性能优化之前首先需要明确相关指标。明确性能指标就是要明确我们关注哪些数据,这些数据如何测量,什么数据算是好的,什么数据算是不好的。
拿到我们需要的指标数据之后才能再针对特定的场景进行优化。
基于Core Web Vitals的指标多年来Google提供了许多工具衡量和报告网页加载效果,有些开发者擅长使用这些工具,而有些开发者因为工具和指标众多难以跟上节奏。
这里我们按照Chrome的最新LightHouse给出的以用户为中心的标准化指标Web Vitals来衡量网页的性能。
其中我们最关心以下指标:
LCP 最大可视内容绘制时间LCP 会报告视口内可见的最大图片、文本块或视频的渲染时间(相对于用户首次导航到网页的时间)。
从用户视角来看,相比于其他指标LCP最能反映出页面加载的速度。
为了提供良好的用户体验,一个网页应该在2.5s内完成最大可视内容加载。
INP 输入延迟时间输入延迟时间指...
一、背景介绍公司采购了Cursor IDE,其中的Composer功能十分强大。目前Xcode缺乏对应的AI功能,尝试迁移到Cursor。
二、准备工作2.1 必要插件安装
安装Swift扩展插件
安装SweetPad扩展插件
在SweetPad插件中安装TOOLS
xcode-build-server 必须安装 别的按需安装即可
2.2 可选插件安装
安装Chinese简体中文插件将Cursor语言改成中文
安装Xcode Keymap扩展插件将Xcode的快捷键映射到Cursor
2.3 界面优化新下载的Cursor功能菜单默认布局是横向的,空间很小,建议改成纵向布局:
Cursor - 首选项 - 设置 - 工作台 - 外观
搜索 workbench.activityBar.orientation,改为vertical
重启即可
三、编译与运行3.1 设备选择在SweetPad插件中找到DESTINATIONS(设备列表)项:
只能找到iOS17以上的设备,最好使用模拟器
此插件不支持真机Debug
右键点击模拟器后弹出选择设备
3.2 构建项目找到BUILD...
一、项目背景在全球化业务快速发展的背景下,我们的教育类应用需要支持18+语言、覆盖100+国家地区的本地化需求。
二、现状分析目前iOS端在基于系统级的.String文件支持多语能力的基础上又增加了一层动态Json多语。
为了获取动态修复多语的能力,我们额外实现了一套动态拉取多个scope下的18种语言json的功能。支持server、本地文件、内存三级缓存。
在根据多语key提取文本时会先到动态多语模块去查询,如果查不到目标字符串则会回退到系统NSLocalizedString获取文本。
主要实现特点:
123456// 内存管理核心逻辑- (NSDictionary *)getCurrentLanguagesData { NSMutableDictionary *stableLanguages = [NSMutableDictionary dictionary]; [self.subScopes enumerateObjects...]; // 全量合并多语数据 return stableLanguages; // 产生内存峰值}
现存...
基于AI助手的多语言翻译系统开发实践一、项目背景在全球化产品开发背景下,我们基于Python构建支持Google翻译与LLM大模型的双引擎翻译系统。核心模块通过 translate_api.py实现,日均处理iOS/Android/Web多端50+语言的百万级字符翻译需求。
在全球化产品开发中,我们构建了基于Python的多语言翻译系统,支持Google翻译和大模型翻译双引擎,通过 translate_api.py实现核心翻译逻辑。系统需要处理iOS/Android/Web多端超过50种语言的实时翻译需求,日均处理量达百万级字符。
二、架构设计亮点1. 双引擎容错机制通过 TranslatorFactory class in translate_api.py实现翻译引擎的动态切换:
123456789101112131415161718from enum import Enumclass TranslatorType(Enum): LLM = "LLM" GOOGLE = "GOOGLE"...
一、架构背景深度剖析1.1 问题场景再现典型痛点表现:
编译时间随模块增加呈指数增长(N 模块编译耗时约 [T = k*N^2])
多团队协作时出现「修改冲突风暴」
基础模块迭代导致全量回归测试
1.2 设计决策矩阵
方案类型
编译时耦合
运行时开销
可维护性
学习曲线
直接引用
高
低
差
低
协议抽象
中
中
优
高
CTMediator
低
中
良
中
URL Router
低
高
良
低
二、技术实现详解2.1 核心类结构1234567891011121314@startumlclass CTMediator { - cachedTargets: NSMutableDictionary + sharedInstance(): CTMediator + performTarget(): id + safePerformAction(): id}class Target_XXX { + Action_YYY(): id}CTMediator --> Target_XXX : 动态调...
代码审查实战指南一、代码风格标准化1.1 命名规范
采用匈牙利命名法(如 strUserName)或现代语义命名(如 userNameTextField)
禁止使用 tmp/data等无意义命名
类名采用大驼峰,方法名使用小驼峰
123456// 好的示例@interface UserService : NSObject- (void)updateUserProfile:(NSString *)userId;@end
1.2 格式一致性
统一缩进策略(4空格制或2空格制)
方法参数对齐标准:
1234- (void)complexCalculationWithParam1:(NSInteger)param1 param2:(CGFloat)param2 param3:(NSDictionary<NSString *, id> *)param3 completion:(void(^)(Result...
iOS Crash类型总结iOS APP系统crash主要分两类:一类是Objective-C Exception,一类是Unix Signal Exception。下面详细介绍。
崩溃日志路径:~/Library/Logs/CrashReporter/MobileDevice
一、Objective-C Exception例如NSDictionary加入nil、数组访问越界等。主要有如下类型:
1. NSInvalidArgumentException非法参数异常(NSInvalidArgumentException)是Objective-C代码最常出现的错误。平时在写代码时需要多加注意,加强对参数的检查,避免传入非法参数导致异常,其中尤以nil参数为甚。
主要场景包括:
1.1 集合数据的参数传递比如NSMutableArray、NSMutableDictionary的数据操作:
NSDictionary不能删除nil的key
NSDictionary不能添加nil的对象
不能插入nil的对象
其他一些nil参数
1.2 其他A...
iOS文件系统编程指南iOS文件系统编程指南
文件系统处理数据文件、应用程序以及与操作系统本身关联的文件的持久存储。因此,文件系统是所有进程使用的基本资源之一。
APFS 是 macOS、iOS、watchOS 和 tvOS 中的默认文件系统。APFS 取代 HFS+ 作为 iOS 10.3 及更高版本以及 macOS High Sierra 及更高版本的默认文件系统。
关于 iOS 文件系统iOS 文件系统面向独立运行的应用程序。为了保持系统简单,iOS 设备的用户无法直接访问文件系统,应用应遵循此约定。
iOS 标准目录:文件所在的位置
目录
描述
AppName.app
这是应用程序的捆绑包。此目录包含应用程序及其所有资源。您不能写入此目录。为防止篡改,捆绑目录在安装时进行了签名。写入此目录会更改签名并阻止您的应用程序启动。但是,您可以获得对存储在应用程序包中的任何资源的只读访问权限。此目录的内容未由 iTunes 或 iCloud 备份。但是,iTunes 会对从 App Store 购买的任何应用程序执行初始同步。
Documents/
使用此目录...
iOS背景模糊实现技术方案需求背景晖致日本提出很多代表在家里录制AI作业,希望可以将背景模糊,保护代表隐私。
类似于腾讯会议的背景虚化功能,录制视频作业 的时候将背景模糊化,只保留用户人像区域。
技术方案业界对这个需求的实现方案基本一致。
首先录制过程中将视频帧做高斯模糊形成背景模糊中”背景”部分。
然后在实时的将每一帧图像中包含人像的部分“扣”出来形成一张黑白分明的灰度图(mask)。一般是人像区域为白色,非人像区域为黑色。
最后使用自定义三输入的滤镜,分别传入模糊后的背景视频帧+灰度mask图+原始视频帧,通过片元着色器对每一个像素点进行遴选。根据灰度图的颜色,白色取原始视频帧,黑色取模糊视频帧。
这样就形成了背景区域是模糊的,人像区域是正常的视频,达到要求。
在视频帧处理这方面我们采用项目中已经引入的GPUImage库来实现。
人像分割这个抠图的技术我们称为人像分割,人像分割算法有很多种,常见的包括:基于颜色和纹理的方法、基于边缘检测的方法、基于深度学习的方法、基于图割的方法等。
目前这一步交由AI组伙伴提供基于TensorFlowLiteObjC的深度学习人像分割模型来实...